///********************************************************************
///* Copyright © 2012 fishr (fishr.flash@gmail.com)  
///********************************************************************


package su.fishr.air.utils.bd.vo 
{
	
	   

	/**
	 *   Экземпляр класса представляет собой вспомогательный
	 * объект передаваемый в парам. классу '' для создания
	 * в локальной БД новой таблицы. Обеспечивает валидное
	 * оформление задаваемых парам-ов новой таблицы.
	 * 
	 * @playerversion          Air 2.0
	 * @langversion            3.0
	 * @author                 fishr
	 * @created                29.02.2012 9:40
	 * @since                  29.02.2012 9:40
	 */
	public  class SQLTable
	{
	/**-------------------------------------------------------------------------------
	* 
	*	   						V A R I A B L E ' S 	
	* 
	* --------------------------------------------------------------------------------
	*/
	//{
		static public const TEXT:String = "TEXT";
		static public const NUMERIC:String = "NUMERIC";
		static public const INTEGER:String = "INTEGER";
		static public const REAL:String = "REAL";
		static public const BOOLEAN:String = "Boolean";
		static public const DATE:String = "Date";
		static public const XML:String = "XML";
		static public const XML_LIST:String = "XMLList";
		static public const OBJECT:String = "Object";
		static public const NONE:String = "NONE";
		public const FIELDS:Array = new Array();
		
		static private const AUTHOR:String = "fishr (fishr.flash@gmail.com)";
		private var _nameTable:String;
		
	//}
	
	/**-------------------------------------------------------------------------------
	* 
	*	 						P R O P E R T I E S 	
	* 
	* --------------------------------------------------------------------------------
	*/
	//{
		
		public function get nameTable():String 
		{
			return _nameTable;
		}
	//}
	/**-------------------------------------------------------------------------------
	* 
	*								P U B L I C 	
	* 
	* --------------------------------------------------------------------------------
	*/
	//{
		/**
		 *  Экземпляр класса принимает в конструкторе имя таблицы
		 * которая будет создана в БД.
		 * @param	name имя таблицы.
		 */
		public function SQLTable( name:String )
		{
			_nameTable = name;
		}
		
		/**
		 *  Метод добавляет в список полей таблицы новые 
		 * поля.
		 * 
		 * @param	name имя поля
		 * @param	type тип поля, задается одним из перечисленных конст. значений в классе.
		 *          Может иметь одно из нижеперечисленных значений:
		 * @param   ext дополнительные указания по формрамтированию поля, напр. ( DEFAULT NULL, UNIQUE KEY etc )
		 * <p>
		 * 	<ul>
		 *      <li>
		 * 			TEXT - текстовые данные.
		 * 		</li>
		 * 		<li>
		 *          NUMERIC - произвольные числовые данные имеющие любой из типов: uint, int, number.
		 * 		</li>
		 *      <li>
		 * 			INTEGER - целое число со знаком.
		 * 		</li>
		 *      <li>
		 * 			REAL - число с плавающей запятой, со знаком.
		 * 		</li>
		 *      <li>
		 * 			Boolean - принимает значения экземпляра Boolean ActionScript или JavaScript. Все остальные
		 *                    сохраняемые значения возвращаются преобразованными в одно из значений типа Boolean
		 *                    согласно правил преобразования принятых в ActionScript.
		 * 		</li>
		 *      <li>
		 * 			Date - значения типа дата. Над другими данными производится попытка преобразования к типу Date.
		 * 		</li>
		 *      <li>
		 * 			Xml - данные в формате xml.
		 * 		</li>
		 *      <li>
		 * 			XMLList - данные в формате XMLList.
		 * 		</li>
		 *      <li>
		 * 			Object - в записях с этип полем возможно сохранение простых и сложных объектов ActionScript,
		 *                   данные сериализиются перед сохранением в формате AMF3. Возможность хранения
		 *                   разнообразных объектов обусловлена возможностями сериализации того или иного 
		 *                   объекта с использованием формата AMF3.
		 * 		</li>
		 *      <li>
		 * 			NONE -   сохраняемая информация может иметь любой тип. Преобразование не выполнятся, ни перед
		 *                   сохранением, ни при извлечении.
		 * 		</li>
		 * 
		 * 	</ul>
		 *     Любое поле таблицы базы данных может иметь значение NULL.
		 * </p>
		 * 
		 * <p>
		 *     Подробнее типах данных и их обработки в среде ActionScript для хранения в БД можно прочитать
		 *     в разделе справки <a href:"http://help.adobe.com/ru_RU/as3/dev/WSd47bd22bdd97276f2aceae3b1262b7f2d43-8000.html" >"Поддержка SQL в локальных базах данных" </a>
		 * </p>
		 * 
		 */
		public function addColoumn( name:String, type:String, ext:String = "" ):void
		{
			switch ( type ) 
			{
				case SQLTable.TEXT: break;
				case SQLTable.NUMERIC: break;
				case SQLTable.INTEGER: break;
				case SQLTable.BOOLEAN:break;
				case SQLTable.DATE:break;
				case SQLTable.XML:break;
				case SQLTable.XML_LIST:break;
				case SQLTable.OBJECT:break;
				case SQLTable.NONE:break;
				default: throw new Error("Тип данных поля указан не верно, или не поддерживается в ActionScript");
			}
			
			FIELDS.push( [ name, type, ext ] );
			
		}
		

	//}
	
	/**-------------------------------------------------------------------------------
	* 
	*								P R I V A T E 	
	* 
	* --------------------------------------------------------------------------------
	*/	
	//{
	
	//}
		
		
	}

}